home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
fb386
/
tool
/
move
/
move.bas
next >
Wrap
BASIC Source File
|
1995-06-24
|
9KB
|
323 lines
10 ' 綺麗にMOVE V1.1
20 '
30 ' Produced By K.Fujita
40 '
50 ' 1995.6.24
60 '
100 'CLEAR ,,,526000:DIM A(65529),B(65529),C(200):'@H
110 CLEAR ,,,258000:DIM A(32000),B(32000),C(200)
120 DIM NO1(19),NO2(19),NO3(19),FR%(19)
130 CLS:FILES:PRINT:COLOR 7
140 INPUT"MOVEするプログラムファイル名 ? ",MNA$
150 INPUT"複数の移動指定をしますか? (する時は Y キー) ",D$::IF D$="Y" OR D$="y" THEN 500
160 INPUT"移動元の先頭行番号は? ",NO1
170 INPUT"移動元の終了行番号は? ",NO2:IF NO2<NO1 THEN PRINT :GOTO 160
180 INPUT"移動先の先頭行番号は? ",NO3
190 INPUT"行番号のSTEP数 ? ",ST
200 INPUT"LISTを出しますか ? (出す時は Y キー) ",D$:IF D$="Y" OR D$="y" THEN P=1
210 INPUT"RENUMしますか ? (RENUMする時は Y キー) ",D$:IF D$<>"Y" AND D$<>"y" THEN 1040
220 RE=1
230 INPUT"RENUM後の先頭行番号 ? ",NOO
240 GOTO 1040
250 '
500 '@5H
510 T=0:SPF%=1
520 PRINT:PRINT T+1;"番目の指定"
530 INPUT"移動元の先頭行番号は? ",NO1(T)
540 INPUT"移動元の終了行番号は? ",NO2(T):IF NO2(T)<NO1(T) THEN 520
550 INPUT"移動先の先頭行番号は? ",NO3(T)
560 IF T=0 THEN 630
570 TT=0
580 IF NO1(T)>=NO1(TT) AND NO1(T)<=NO2(TT) THEN 810
590 IF NO2(T)>=NO1(TT) AND NO2(T)<=NO2(TT) THEN 840
600 IF NO1(TT)>NO1(T) AND NO2(TT)<NO2(T) THEN 870
610 TT=TT+1:IF TT<T THEN 580
620 IF T=19 THEN 680
630 PRINT
640 PRINT"移動範囲の指定を続けますか?"
650 PRINT"後";19-T;"箇所指定できます。"
660 INPUT"(指定する時はYキー) ",D$
670 IF D$="Y" OR D$="y" THEN T=T+1:GOTO 520
680 RT%=T:PRINT
690 INPUT"行番号のSTEP数 ? ",ST
700 INPUT"LISTを出しますか ? (出す時は Y キー) ",D$:IF D$="Y" OR D$="y" THEN P=1
710 RE=1
720 INPUT"RENUM後の先頭行番号 ? ",NOO
730 GOTO 2010
740 '
800 '@H
810 COLOR 6:BEEP
820 PRINT "移動元の先頭行番号は";TT+1;"番目の範囲指定に含まれています"
830 COLOR 7:GOTO 520
840 COLOR 6:BEEP
850 PRINT "移動元の終了行番号は";TT+1;"番目の範囲指定に含まれています"
860 COLOR 7:GOTO 520
870 COLOR 6:BEEP
880 PRINT TT+1;"番目で指定した範囲が含まれています"
890 COLOR 7:GOTO 520
1000 '@K
1010 '**** メイン プログラム ****
1020 '--- イドウデータ チュウシュツ ---
1030 '
1040 OPEN"I",#1,MNA$
1050 OPEN"O",#2,"ダミー1":OPEN"O",#3,"ダミー2"
1060 IF EOF(1) THEN 1200
1070 LINE INPUT#1,DAT$
1080 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1090 IF NO>=NO1 AND NO<=NO2 THEN PRINT#2,DAT$:GOTO 1060
1100 PRINT#3,DAT$:GOTO 1060
1200 '@H
1210 CLOSE:TG=0:TP=0:FR=0
1220 OPEN"I",#1,"ダミー2":OPEN"O",#2,"ダミー":OPEN"I",#3,"ダミー1"
1230 IF RE=0 THEN 1500
1240 IF EOF(1) THEN 1410
1250 LINE INPUT#1,DAT$
1260 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1270 IF NO<NO3 OR FR=1 THEN GOSUB 4110:GOTO 1240
1280 HNO=NO:HDAT$=DAT$:CF%=2:GOSUB 4010
1290 IF EOF(3) THEN NO=HNO:DAT$=HDAT$:CF%=1:FR=1:GOSUB 4050:GOTO 1270
1300 LINE INPUT#3,DAT$
1310 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1320 GOSUB 4110:GOTO 1290
1400 '@H
1410 IF FR=1 THEN 3020 ELSE CF%=2:GOSUB 4010
1420 IF EOF(3) THEN GOSUB 4050:GOTO 3020
1430 LINE INPUT#3,DAT$
1440 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1450 GOSUB 4110:GOTO 1420
1500 '@H
1510 IF EOF(1) THEN NOO=NO3:GOTO 1410
1520 LINE INPUT#1,DAT$
1530 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1540 IF NO<NO3 OR FR=1 THEN NOO=NO:GOSUB 4230:GOTO 1510
1550 HNO=NO:HDAT$=DAT$:CF%=2:GOSUB 4010:NOO=NO3
1560 IF EOF(3) THEN NO=HNO:DAT$=HDAT$:CF%=1:FR=1:GOSUB 4050:GOTO 1600
1570 LINE INPUT#3,DAT$
1580 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
1590 GOSUB 4230:GOTO 1560
1600 '@H
1610 IF NO>NOO-ST THEN 1540
1620 COLOR 2:BEEP
1630 PRINT"移動先の行番号と既存の行番号が"
1640 PRINT"重なっていますので、以後はRENUM処理します!"
1650 PRINT" (Hit any Key)":COLOR 7
1660 GOSUB 4020
1670 GOTO 1270
1680 '
2000 '@K
2010 OPEN"I",#1,MNA$:OPEN"O",#3,"ダミー2"
2020 IF EOF(1) THEN 2510
2030 LINE INPUT#1,DAT$
2040 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
2050 T=0
2060 IF NO>=NO1(T) AND NO<=NO2(T) THEN 2110
2070 IF T<RT% THEN T=T+1:GOTO 2060
2080 PRINT#3,DAT$:GOTO 2020
2100 '@H
2110 OPEN"O",#2,"ダミー_"+STR$(T)
2120 GOTO 2160
2130 IF EOF(1) THEN 2510
2140 LINE INPUT#1,DAT$
2150 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
2160 IF NO<=NO2(T) THEN PRINT#2,DAT$:GOTO 2130
2170 CLOSE#2
2180 GOTO 2050
2190 '
2500 '@5H
2510 CLOSE:TG=0:TP=0
2520 OPEN"I",#1,"ダミー2":OPEN"O",#2,"ダミー"
2530 IF EOF(1) THEN 2710
2540 LINE INPUT#1,DAT$
2550 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
2560 T=0
2570 IF NO>=NO3(T) AND FR%(T)=0 THEN 2600
2580 IF T<RT% THEN T=T+1:GOTO 2570
2590 GOSUB 4110:GOTO 2530
2600 HNO=NO:HDAT$=DAT$:CF%=2:GOSUB 4010
2610 OPEN"I",#3,"ダミー_"+STR$(T)
2620 IF EOF(3) THEN NO=HNO:DAT$=HDAT$:CF%=1:FR%(T)=1:GOSUB 4050:CLOSE#3:GOTO 2580
2630 LINE INPUT#3,DAT$
2640 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
2650 GOSUB 4110:GOTO 2620
2700 '@H
2710 T=0
2720 IF FR%(T)=0 THEN 2810
2730 IF T<RT% THEN T=T+1:GOTO 2720
2740 GOTO 3020
2800 '@H
2810 CF%=2:GOSUB 4010
2820 T=0
2830 IF FR%(T)=0 THEN 2860
2840 IF T<RT% THEN T=T+1:GOTO 2830
2850 GOSUB 4050:GOTO 3020
2860 OPEN"I",#3,"ダミー_"+STR$(T)
2870 IF EOF(3) THEN CLOSE#3:GOTO 2840
2880 LINE INPUT#3,DAT$
2890 NO=VAL(LEFT$(DAT$,INSTR(DAT$," ")))
2900 GOSUB 4110:GOTO 2870
2910 '
3000 '--- シン ファイル サクセイ --- '@K
3010 '
3020 CLOSE:PRINT:TG=0:TP=0:CF%=0:ERF%=0:COLOR 7
3030 INPUT "作成するプログラムファイル名 ? ",NA$:IF NA$="" THEN 3150
3040 OPEN"I",#1,"ダミー":OPEN"O",#2,NA$
3050 IF EOF(1) THEN 3130
3060 LINE INPUT#1,DAT$
3070 GOSUB 5000
3080 PRINT#2,MID$(STR$(B(TG)),2);" ";DAT$
3090 IF C(TP)=TG THEN GOSUB 3180:TP=TP+1
3100 IF ERFF%=1 THEN GOSUB 3300:GOTO 3120
3110 IF P=1 THEN PRINT MID$(STR$(B(TG)),2);" ";DAT$
3120 TG=TG+1:GOTO 3050
3130 '
3140 CLOSE:COLOR 7
3150 KILL"ダミー":KILL"ダミー2":IF SPF%=0 THEN KILL"ダミー1":END
3160 FOR T=0 TO RT%:KILL"ダミー_"+STR$(T):NEXT:END
3170 '
3180 IF CF%=1 THEN CF%=0:COLOR 7 ELSE CF%=1:COLOR 5
3190 RETURN
3200 '
3300 '@H エラー
3310 COLOR 2:ERFF%=0
3320 PRINT MID$(STR$(B(TG)),2);" ";DAT$
3330 COLOR 6
3340 PRINT"上記の行に存在してない行番号が使われている恐れがあります"
3350 PRINT" Hit Any Key"
3360 D$=INKEY$:IF D$="" THEN 3360
3370 IF CF%=1 THEN COLOR 5 ELSE COLOR 7
3380 RETURN
4000 '@K
4010 COLOR 6:PRINT "ここへ移動してきます (Hit any key)":COLOR 3
4020 D$=INKEY$:IF D$="" THEN 4020
4030 RETURN
4040 '
4050 COLOR 6:PRINT "ここまでです (Hit any key)":COLOR 7
4060 GOTO 4020
4100 '@H
4110 IF INSTR(DAT$,"'@H") THEN NO1=100:GOTO 4180
4120 IF INSTR(DAT$,"'@2H") THEN NO1=200:GOTO 4180
4130 IF INSTR(DAT$,"'@5H") THEN NO1=500:GOTO 4180
4140 IF INSTR(DAT$,"'@K") THEN NO1=1000:GOTO 4180
4150 IF INSTR(DAT$,"'@5K") THEN NO1=5000:GOTO 4180
4160 IF INSTR(DAT$,"'@M") THEN NO1=10000:GOTO 4180
4170 GOTO 4240
4180 IF (NOO MOD NO1)=0 THEN 4200
4190 NOO=(NOO\NO1+1)*NO1
4200 C(TP)=TG:TP=TP+1
4210 IF CF%=1 THEN CF%=0:COLOR 7:GOTO 4240
4220 IF CF%=0 THEN CF%=1:COLOR 5:GOTO 4240
4230 IF CF%=2 THEN COLOR 3
4240 A(NO)=NOO:PRINT NO;TAB(7)"-->";TAB(12);NOO:B(TG)=NOO:NOO=NOO+ST:TG=TG+1
4250 PRINT#2,MID$(DAT$,LEN(STR$(NO))+1)
4260 RETURN
4270 '
4500 '@5H
4510 W=F+L
4520 A$=MID$(DAT$,W)
4530 B=VAL(A$)
4540 RETURN
4600 '@H
4610 D1$=LEFT$(DAT$,W-1)
4620 A$=MID$(STR$(B),2)
4630 W=INSTR(W,DAT$,A$)+LEN(A$)
4640 D2$=MID$(DAT$,W)
4650 DAT$=D1$+STR$(A(B))+D2$
4660 W=LEN(D1$+STR$(A(B)))+1
4670 RETURN
4680 '
4700 '-- GOTO GOSUB -- '@H
4710 GOSUB 4510
4720 IF B=0 THEN RETURN
4730 IF A(B)=0 THEN A(B)=B:ERF%=1:ERFF%=1
4740 GOSUB 4610:IF ERF%=1 THEN A(B)=0:ERF%=0
4750 W1=LEN(DAT$)
4760 IF W>W1 THEN 4800
4770 D2$=MID$(DAT$,W,1)
4780 IF D2$="," THEN W=W+1:GOF%=1:GOTO 4820
4790 IF D2$=" " THEN W=W+1:GOTO 4760
4800 RETURN
4810 '
4820 GOSUB 4520
4830 IF B=0 THEN 4800
4840 IF A(B)<>0 THEN 4740
4850 W=W+LEN(MID$(STR$(B),2))
4860 GOTO 4760
4870 '
4900 '-- THEN ELSE NEXT RETURN RESTORE RESUME -- '@H
4910 GOSUB 4510
4920 IF B=0 OR A(B)=0 THEN RETURN
4930 GOSUB 4610
4940 RETURN
4950 '
5000 '-- GOTO -- '@H
5010 W=1:GOF%=0
5020 F=INSTR(W,DAT$,"GOTO")
5030 IF F=0 THEN 5050
5040 L=4:GOSUB 4710:GOTO 5020
5050 '-- GOSUB --
5060 W=1
5070 F=INSTR(W,DAT$,"GOSUB")
5080 IF F=0 THEN 5100
5090 L=5:GOSUB 4710:GOTO 5070
5100 '-- THEN --
5110 W=1
5120 F=INSTR(W,DAT$,"THEN")
5130 IF F=0 THEN 5150
5140 L=4:GOSUB 4910:GOTO 5120
5150 '-- ELSE --
5160 W=1
5170 F=INSTR(W,DAT$,"ELSE")
5180 IF F=0 THEN 5200
5190 L=4:GOSUB 4910:GOTO 5170
5200 '-- RETURN --
5210 W=1
5220 F=INSTR(W,DAT$,"RETURN")
5230 IF F=0 THEN 5250
5240 L=6:GOSUB 4910:GOTO 5220
5250 '-- RESTORE --
5260 W=1
5270 F=INSTR(W,DAT$,"RESTORE")
5280 IF F=0 THEN 5300
5290 L=7:GOSUB 4910:GOTO 5270
5300 '-- RESUME --
5310 W=1
5320 F=INSTR(W,DAT$,"RESUME")
5330 IF F=0 THEN 5350
5340 L=6:GOSUB 4910:GOTO 5320
5350 '--- GO. ---
5360 W=1
5370 F=INSTR(W,DAT$,"GO.")
5380 IF F=0 THEN 5400
5390 L=3:GOSUB 4710:GOTO 5370
5400 '-- GOS. --
5410 W=1
5420 F=INSTR(W,DAT$,"GOS.")
5430 IF F=0 THEN 5450
5440 L=4:GOSUB 4710:GOTO 5420
5450 '-- RET. --
5460 W=1
5470 F=INSTR(W,DAT$,"RET.")
5480 IF F=0 THEN 5500
5490 L=4:GOSUB 4910:GOTO 5470
5500 '-- RUN --
5510 W=1
5520 F=INSTR(W,DAT$,"RUN")
5530 IF F=0 THEN 5550
5540 L=3:GOSUB 4910:GOTO 5520
5550 '-- R. --
5560 W=1
5570 F=INSTR(W,DAT$,"R.")
5580 IF F=0 THEN 5700
5590 L=2:GOSUB 4910:GOTO 5570
5600 '
5700 ' 圧縮 '@H
5710 IF GOF%=0 THEN RETURN
5720 W=INSTR(W,DAT$,", ")
5730 IF W=0 THEN RETURN
5740 '
5750 D1$=LEFT$(DAT$,W)
5760 D2$=MID$(DAT$,W+2)
5770 DAT$=D1$+D2$
5780 GOTO 5720
5790 '